import _ from 'lodash'
// 空内容时显示的内容
export const nothingTip = '-'
/**
 *
 * @param emptyText 空的时候显示
 * @param valueHandler 处理cell格式化用
 * @returns {function(*, *, *, *): *}
 */
export function useIfEmptyForTableFormatter(
    emptyText = nothingTip,
    valueHandler = value => value
) {
    return (row, column, cellValue, index) =>
        isEmpty(cellValue) ? emptyText : valueHandler(cellValue)
}

/**
 * 判断是否为空
 * 1. 数字 → false
 * 2. 函数 → false
 * 3. 'null'、'undefined → true
 * 4. lodash.isEmpty(value)
 * @param value 值
 * @returns {boolean} 是否为空
 */
export function isEmpty(value) {
    return (
        !_.isNumber(value) && !_.isFunction(value) &&
        (_.isEmpty(value) || value === 'null' || value === 'undefined')
    )
}

/**
 * 请假表单审核状态(admin)
 * @returns
 */
export function absStatusFormat(
    emptyText = nothingTip,
) {
    let map= new Map()
    map.set(0,'待审核')
    map.set(1,'审核未通过')
    map.set(2,'审核通过，待销假')
    map.set(3,'已申请销假')
    map.set(4,'已核实返校')
    map.set(5,'夜不归宿')

    return (row, column, cellValue, index) =>
        isEmpty(cellValue) ? emptyText : map.get(cellValue)
}

/**
 * 请假表单年级格式化(admin)
 * @returns
 */
export function absClassFormat(
    emptyText = nothingTip,
) {
    let map= new Map()
    map.set(1,'大一')
    map.set(2,'大二')
    map.set(3,'大三')
    map.set(4,'大四')

    return (row, column, cellValue, index) =>
        isEmpty(cellValue) ? emptyText : map.get(cellValue)
}


/**
 * 请假审核状态option
 * @returns {{label: *, value: *}[]}
 */
export function absStatusDict() {
    let dict = []

    let map= new Map()
    map.set(0,'待审核')
    map.set(1,'审核未通过')
    map.set(2,'审核通过，待销假')
    map.set(3,'已申请销假')
    map.set(4,'已核实返校')
    map.set(5,'夜不归宿')

    dict = Array.from(map).map(([key, value]) => ({
        label: value,
        value: key
    }));

    console.log("absStatusDict:" ,dict)
    return dict
}

/**
 * 年级option
 * @returns {{label: *, value: *}[]}
 */
export function absClassDict() {
    let dict = []

    let map= new Map()
    map.set(1,'大一')
    map.set(2,'大二')
    map.set(3,'大三')
    map.set(4,'大四')

    dict = Array.from(map).map(([key, value]) => ({
        label: value,
        value: key
    }));

    console.log("absStatusDict:" ,dict)
    return dict
}

export async function urlToFile(url) {
    try {
        // 发送请求获取图片的 Blob 数据
        const response = await fetch(url);
        const blob = await response.blob();
        const {filename, mimeType} = extractFilenameAndMimeType(url);

        // 将 Blob 数据转换为 File 对象
        const file = new File([blob], filename, { type: mimeType });
        return file;
    } catch (error) {
        console.error('Error converting URL to File:', error);
        throw error;
    }
}

function extractFilenameAndMimeType(url) {
    try {
        // 创建一个 URL 对象
        const parsedUrl = new URL(url);

        // 获取路径部分
        const path = parsedUrl.pathname;

        // 获取文件名（包括扩展名）
        const filename = path.substring(path.lastIndexOf('/') + 1);

        // 获取文件扩展名
        const extension = filename.split('.').pop().toLowerCase();

        // 根据文件扩展名确定 MIME 类型
        const mimeType = getMimeTypeByExtension(extension);

        return { filename, mimeType };
    } catch (error) {
        console.error('Error extracting filename and mimeType:', error);
        throw error;
    }
}

function getMimeTypeByExtension(extension) {
    const mimeTypes = {
        'jpg': 'image/jpeg',
        'jpeg': 'image/jpeg',
        'png': 'image/png',
        'gif': 'image/gif',
        'bmp': 'image/bmp',
        'svg': 'image/svg+xml',
        'webp': 'image/webp',
        // 添加更多 MIME 类型映射
    };

    return mimeTypes[extension] || 'application/octet-stream';
}